/*
 * 初始化数据库
 */
use rusqlite::{Connection, Result};

pub fn init_db() -> Result<()> {
    let conn = Connection::open("works.db")?;
    println!("before---------------------------");
    conn.execute_batch(
        r#"
        CREATE TABLE  IF NOT EXISTS material (
            id INTEGER PRIMARY KEY,
            name TEXT,
            code TEXT,
            parent_id INTEGER,
            supplier_id INTEGER,
            color_code TEXT,
            background_material TEXT,
            status INTEGER NOT NULL,
            length REAL,
            width REAL,
            thickness REAL,
            residual REAL,
            price INTEGER,  -- 使用 INTEGER 存储, x10000
            unit TEXT,
            remark TEXT,
            created_by TEXT NOT NULL,
            modified_by TEXT NOT NULL,
            created_at TEXT NOT NULL,  -- 存储 ISO8601 格式时间字符串
            modified_at TEXT NOT NULL  -- 存储 ISO8601 格式时间字符串
        );

        CREATE TABLE IF NOT EXISTS event (
            id INTEGER PRIMARY KEY AUTOINCREMENT,
            title TEXT NOT NULL,
            content TEXT NOT NULL,
            type_id INTEGER NOT NULL DEFAULT 0,
            status INTEGER NOT NULL DEFAULT 0,
            end_time TEXT NOT NULL,
            start_time TEXT NOT NULL,
            created_by TEXT,
            modified_by TEXT,
            created_at TEXT NOT NULL DEFAULT (datetime('now', 'localtime')),
            modified_at TEXT NOT NULL DEFAULT (datetime('now', 'localtime'))
        );

        -- 触发器：更新时自动修改 modified_at
        CREATE TRIGGER IF NOT EXISTS update_modified_time
        AFTER UPDATE ON event
        FOR EACH ROW
        BEGIN
            UPDATE event
            SET modified_at = datetime('now', 'localtime')
            WHERE id = OLD.id;
        END;

        CREATE TABLE  IF NOT EXISTS company (
            id INTEGER PRIMARY KEY AUTOINCREMENT,
            name TEXT NOT NULL,
            type_id INTEGER NOT NULL DEFAULT 1,
            status INTEGER NOT NULL DEFAULT 1,
            address TEXT NOT NULL,
            staff_num INTEGER NOT NULL DEFAULT 0,
            capacity TEXT,
            remark TEXT,
            created_by TEXT,
            modified_by TEXT,
            created_at TEXT NOT NULL DEFAULT (datetime('now', 'localtime')),
            modified_at TEXT NOT NULL DEFAULT (datetime('now', 'localtime'))
        );

        -- 自动更新修改时间
        CREATE TRIGGER IF NOT EXISTS update_company_modified_time
        AFTER UPDATE ON company
        FOR EACH ROW
        BEGIN
            UPDATE company
            SET modified_at = datetime('now', 'localtime')
            WHERE id = OLD.id;
        END;

        CREATE TABLE IF NOT EXISTS orders (
            id INTEGER PRIMARY KEY AUTOINCREMENT,
            material_id INTEGER NOT NULL,
            client_id INTEGER NOT NULL,
            contact_id INTEGER NOT NULL,
            quantity INTEGER NOT NULL,
            price INTEGER NOT NULL,                   -- 使用 INTEGER 存储, x10000
            amount INTEGER NOT NULL,                   -- 使用 INTEGER 存储, x10000
            unit TEXT NOT NULL,
            place_order_date TEXT NOT NULL,           -- YYYY-MM-DD
            plan_delivery_date TEXT NOT NULL,         -- YYYY-MM-DD
            actual_delivery_date TEXT,                -- YYYY-MM-DD, 可为空
            status TINYINT NOT NULL DEFAULT 1,        -- 订单状态
            remark TEXT,
            image_path TEXT,                          -- 多个用分号隔开
            created_at TEXT NOT NULL DEFAULT (datetime('now', 'localtime')),
            created_by TEXT NOT NULL,
            modified_at TEXT NOT NULL DEFAULT (datetime('now', 'localtime')),
            modified_by TEXT NOT NULL
        );

        CREATE TABLE IF NOT EXISTS contact (
            id INTEGER PRIMARY KEY AUTOINCREMENT, -- 联系人ID
            name TEXT NOT NULL, -- 联系人姓名
            email TEXT, -- 联系人邮箱
            phone TEXT NOT NULL, -- 联系人电话
            gender TINYINT, -- 联系人性别，0：男，1：女
            birthday TEXT, -- 联系人生日，格式：YYYY-MM-DD
            job_title TEXT, -- 联系人职位
            avatar VARCHAR(255), -- 联系人头像url
            company_id INTEGER, -- 公司名称
            status INTEGER DEFAULT 1, -- 0: 离职，1：在职，2：试用期，3：退休，默认为1（在职）
            personality TEXT, -- 联系人性格描述，便于客户管理或者对接工作，掌握喜好
            created_at TEXT NOT NULL DEFAULT (datetime('now', 'localtime')), -- 创建日期，格式：YYYY-MM-DD HH:MM:SS.SSS
            created_by TEXT NOT NULL, -- 创建人
            modified_at TEXT NOT NULL DEFAULT (datetime('now', 'localtime')), -- 更新日期，格式：YYYY-MM-DD HH:MM:SS.SSS
            modified_by TEXT NOT NULL -- 更新人
        );

        "#
    )?;

    println!("end---------------------------");
    Ok(())
}
